﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace FAS.Objetos
{
    public class Materia: IFas
    {
        #region Atributos
        
        public int IdMateria { get; set; }
        public string ClaveMateria { get; set; }
        public string Nombre { get; set; }
        public IList<Objetivo> Objetivos { get; set; }
        private ConexionMySQL conexion = new ConexionMySQL();
        #endregion

        #region Constructor
        public Materia() { }
        public Materia(string nombre, string clave)
        {
            this.Nombre = nombre;
            this.ClaveMateria = clave;
            this.Objetivos = null;
        }
        #endregion

        #region Metodos
        public static Materia GetMateria(int Id_Materia)
        {
            DataSet data = new ConexionMySQL().GetQuery("SELECT * FROM `materia` where IdMateria = '" + Id_Materia + "'");
            Materia materia = new Materia();
            materia.IdMateria = Id_Materia;
            materia.Nombre = data.Tables[0].Rows[0]["Nombre"].ToString();
            materia.ClaveMateria= (data.Tables[0].Rows[0]["ClaveMateria"].ToString());
            materia.Objetivos = getObjetivos(materia.IdMateria);
            materia.Nombre = Uri.UnescapeDataString(materia.Nombre);
            return materia;
        }

        public static Materia GetMateria(String clave)
        {
            DataSet data = new ConexionMySQL().GetQuery("SELECT * FROM `materia` where ClaveMateria = '" + clave + "'");
            Materia materia = new Materia();
            materia.IdMateria = int.Parse(data.Tables[0].Rows[0]["IdMateria"].ToString());
            materia.Nombre = data.Tables[0].Rows[0]["Nombre"].ToString();
            materia.ClaveMateria = (data.Tables[0].Rows[0]["ClaveMateria"].ToString());
            materia.Objetivos = getObjetivos(materia.IdMateria);
            materia.Nombre = Uri.UnescapeDataString(materia.Nombre);
            return materia;
        }

        public static List<Objetivo> getObjetivos(int id) 
        {
            List<Objetivo> objetivos = new List<Objetivo>();
            DataSet data = new ConexionMySQL().GetQuery("SELECT * FROM `Objetivo` where IdMateria = '" + id + "'");
            foreach (DataRow r in data.Tables[0].Rows)
            {
                Objetivo p = new Objetivo();
                objetivos.Add(Objetivo.GetObjetivo(r["IdObjetivo"].ToString(),id));
            }
            return objetivos;
        }

        public static List<Materia> getAll()
        {
            DataSet data = new ConexionMySQL().GetQuery("SELECT * FROM `materia`");
            List<Materia> lstMateria = new List<Materia>();
            foreach (DataRow row in data.Tables[0].Rows)
                lstMateria.Add(GetMateria(int.Parse(row["IdMateria"].ToString())));
            return lstMateria;
        }

        public Dictionary<string, object> getAtributos()
        {
            Dictionary<string, object> diccionario = new Dictionary<string, object>();
            diccionario.Add("IdMateriaP", IdMateria);
            diccionario.Add("ClaveMateriaP", ClaveMateria);
            diccionario.Add("NombreP", Nombre);
            return diccionario;
        }

        public Dictionary<string, object> getAtributosInsertar()
        {
            Dictionary<string, object> diccionario = new Dictionary<string, object>();
            diccionario.Add("NombreP", Nombre);
            diccionario.Add("ClaveMateriaP", ClaveMateria);
            return diccionario;
        }

        public bool update()
        {

            return conexion.AccionesDB(getAtributos(), "Updatemateria");
        }

        public bool delete()
        {
            return conexion.AccionesDB(getAtributos(), "Deletemateria");
        }

        public int insertar()
        {
            return conexion.insertar(getAtributosInsertar(), "Insertarmateria", "IdMateria", "`materia`");
        }
        #endregion


        public object NewIdObjetivo { get; set; }

        internal static string GetNombre(int p)
        {
            DataSet data = new ConexionMySQL().GetQuery("SELECT ClaveMateria FROM `materia` where IdMateria = '" + p + "'");
            return data.Tables[0].Rows[0][0].ToString();          
        }

        internal static string GetNombreMateria(int p)
        {
            DataSet data = new ConexionMySQL().GetQuery("SELECT Nombre FROM `materia` where IdMateria = '" + p + "'");
            return data.Tables[0].Rows[0][0].ToString();
        }
    }
}
